package com.moly.websocketone.configuration.websocket.handler;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

/**
 * @Description: 实时监听 websocket
 * @Author: m01
 * @Date: created at  2018/11/11  18:58
 * @Modified By:
 */
public class ListeningWebsocket implements WebSocketHandler {
    @Override
    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {

        //在WebSocket协商成功并且WebSocket连接打开并准备好使用后调用。
        System.out.println("新的连接建立了");
    }


    @Override
    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
        //在新的WebSocket消息到达时调用。
        System.out.println("新的请求信息 来了");
        webSocketSession.sendMessage(webSocketMessage);
        System.out.println("新的请求信息 已发送");
        System.out.println('h');

    }

    @Override
    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
        //处理底层WebSocket消息传输中的错误。
        System.out.println("新的请求信息");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
        //在任何一方关闭WebSocket连接之后或在发生传输错误之后调用。
        // 虽然会话在技术上可能仍然是开放的，但取决于底层实现，
        // 此时不鼓励发送消息，并且很可能不会成功。
        System.out.println("新的请求信息");
    }

    @Override
    public boolean supportsPartialMessages() {
//WebSocketHandler是否处理部分消息。
// 如果此标志设置为 true并且底层WebSocket服务器支持部分消息，
// 则可以拆分大型WebSocket消息或未知大小的消息，
// 并且可以通过多次调用接收 handleMessage(WebSocketSession,
        System.out.println("不支持 分片信息");
        return false;
    }
}
